#include <stdio.h>
#include <string.h>

// int main() // 指针就是指向地址
// {
//     // 指针定义
//     int num = 100;
//     printf("&num =%p,|t*(&num)=%d\n", &num, *(&num));
//
//     // 整形指针
//     // 一级指针
//     int *pNum = &num;
//     printf("pNum = %p,It *pNum =%d\n", pNum, *pNum);
//
//     // 二级指针
//     int **ppNum = &pNum;
//     printf("%d\n",**ppNum);
//     char *pCh = NULL; // 字符指针
//     return 0;
// }

// int main()          //在64位操作系统里指针占用内存是8个字节
// {
//     int num = 100;
//     int * pNum = &num;
//     printf("%ld\n",sizeof(num));
//     printf("%ld\n",sizeof(pNum));
//
//     char sex='m';
//     char * pSex = &sex;
//     printf("%ld\n",sizeof(sex));
//     printf("%ld\n",sizeof(pSex));
//     return 0;
// }

// int main() // 字符数组和字符指针
// {
//     char buffer[] = "hello world!"; // 数组名就是数组首地址
//     printf("%s\n", buffer);
//     char *pNum = buffer;
//
//     printf("%c\n", *pNum);
//     printf("%s\n", pNum);
//
//     printf("%ld\n", sizeof(buffer));
//     printf("%ld\n", sizeof(pNum));
//
//     printf("%c\n", *buffer + 1);
//     printf("%c\n", *(buffer + 4));
//     printf("%c\n", *(pNum + 4));
//     printf("%c\n", buffer[4]);
//
//     // 数组就是指针，指针就是数组
//     //*(buffer + X)= buffer[X]
//
//     return 0;
// }

// int main() // 二维数组和二级指针
// {
//     int nums[3][4];
//     int m = 1;
//     for (int row = 0; row < 3; row++)
//     {
//         for (int col = 0; col < 4; col++)
//         {
//             nums[row][col] = m++;
//             // m++;
//             printf("%d ", m);
//         }
//         printf("\n");
//     }
//     printf("nums =%p\n", nums);
//     printf("nums[0]=%p\n", nums[0]);
//     printf("&nums[0][0]=%p\n", &nums[0][0]);
//     // 二维数组:数组名 数组第一行地址,数组首元素地址显一样的.
//
//     printf("nums[0]= %p\n", nums[0]);
//     printf("nums[1]= %p\n", nums[1]);
//     printf("nums[2]= %p\n", nums[2]);
//
//     printf("*(nums + 0)= %p\n", *(nums + 0));
//     printf("*(nums + 1)= %p\n", *(nums + 1));
//     printf("*(nums + 2)= %p\n", *(nums + 2));
//
//     printf("&nums[1][2]=%p\n", &nums[1][2]);
//     printf("*(nums+1)+2=%p\n", *(nums + 1) + 2);
//
//     printf("&nums[1][2]=%d\n", *(&nums[1][2]));
//     printf("*(nums +1)+2=%d\n", *(*(nums + 1) + 2));
//
//     // 结论:nums[x][y] = *(nums + x) + y
//     return 0;
// }

// int main()
//{
//  char buffer[32] = "hello world 271 class.";
//   局部变量都是在栈空间,除了static静态局部变量,
//   生命周期:计算机自己管理，跟程序员无关。生命周期在{}内
//  int length = sizeof(buffer) / sizeof(buffer[0]);
//  printf("length =%d\n", length);
//
// int num = 0;
// for (int dex = 0; dex < length; dex++)
// {
//     if (buffer[dex] > 'a' && buffer[dex] <= 'z')
//     {
//         num++;
//     }
// }
// printf("%d\n", num);
//
// int snum = 0;
// for (int ide = 0; buffer[ide] != '\0'; ide++)
// {
//     if (buffer[ide] != ' ')
//     {
//         snum++;
//     }
// }
// printf("%d\n", snum);
//
// char buffer[] = "dghauihgdoiadhjiopfopajpodfjop";
// int num = strlen(buffer);
// printf("%d", num);
//
// return 0;
//}

// int main()
// {
//     //字符串 : 在常亮区不可被修改
//     char *str = "hello world!";
//
//     int size = sizeof(str);
//     printf("%d\n", size);
//
//     int length = strlen(str);
//     printf("length =%d\n", length);
//
//     int left = 0;
//     int right = length - 1;
//     while (left < right)
//     {
//         char tmp = str[left];
//         str[left] = str[right];
//         str[right] = tmp;
//         left++;
//         right--;
//     }
//     return 0;
// }

int main()
{
    // 字符串函数 */strlen函数 :计算字符串的长度
    //  */strcmp函数 :比较字符串的大小 */
    char *str1 = "zhangsan";
    char *str2 = "lisi";
    int ret = strcmp(str1, str2);

    char dst[32] = "hello";
    char *src = "world";

    strcat(dst, src);
    printf("dst =%s\n", dst);

   
    return 0;
}
